package com.lam.common.components.dict.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.core.annotation.AliasFor;

import com.lam.common.components.dict.constant.DictTypeEnum;
import com.lam.common.components.dict.model.TableDictInfo;

/**
 * 数据字典注解
 */
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Dict {
	
	/** 数据字典编码 */
	@AliasFor("dictCode")
    String value() default "";
	
    /** 数据字典编码 */
	@AliasFor("value")
    String dictCode() default "";
	
	/** 字典类型，默认为普通字典 */
	DictTypeEnum dictType() default DictTypeEnum.SIMPLE_DICT;
	
	/** 是否反向转换字典，false则表示正向转换(value=>label)，true则表示反向转换(value=>label) */
	boolean reverse() default false;
	
	/** 转换字典时源值的字段名，不填默认为当前字段 */
	String origField() default "";
    
    /** 转换字典后的值赋值到的字段名 */
	String targetField() default "";
	
	/** 转换字典后的值是否赋值到原字段 */
	boolean targetUseOrig() default false;

    /**
     * 数据字典要取数据的表
     * <p><b>注：要配合 valueField 和 textField 一起使用 </b><p>
     */
    String tableName() default "";
    /** 作为字典值的 tableName表的数据库字段名称 */
    String valueField() default "";
    /** 作为字典标签的 tableName表的数据库字段名称 */
    String textField() default "";
    /** 
     * 作为字典标签的 tableName表的数据库查询条件，支持变量，变量用{变量名称}占位 ，
     * <br> 例：
     * <pre>
     *  and user_id={userId} and project_id={projectId}
     * </pre>
     */
    String conditionSql() default TableDictInfo.NO_CONDITION_SQL;
}
